package table

// Course 课程基本信息。关于课程价格、积分等等在扩充模块中做，这里只保留基本信息。
// 因为产品定位是企业学习考试系统的话，to B 业务很大程度是用不到这些功能的。
// 对于 to C 业务，例如 k12教育等，价格积分等应该是核心模块，要做事务等，也需要抽离。怎么算都不应该放这里
type Course struct {
	CourseId       int64   `json:"courseId,string" gorm:"primaryKey;column:course_id"`
	Name           string  `json:"name"`             // 课程名称
	Kind           int     `json:"kind"`             //课程类型
	Code           string  `json:"code"`             // 课程编号
	Cover          string  `json:"cover"`            // 封面图片的base64
	Describe       string  `json:"describe"`         // 课程描述
	Status         string  `json:"status"`           // 状态
	CourseDuration int64   `json:"courseDuration"`   // 课程时长
	AllowedX       int     `json:"allowedX"`         // 是否允许倍速播放，0-不允许，大于零是可以接受的倍速
	ClassHour      float64 `json:"classHour"`        // 学时，学完可以增加的值
	ClassScore     float64 `json:"classScore"`       // 学分，学完可以增加的值
	Label          string  `json:"label"`            // 标签
	SupportMobile  bool    `json:"supportMobile"`    // 是否支持移动设备
	ParentId       int64   `json:"parentId,string" ` // 课程之间也是可以有父子关系的
	Sort           int8    `json:"sort"`             // 排序，1最大
	AutoCreateInfo
}

func (r *Course) TableName() string {
	return "lms_course"
}

// CourseExtend 课程扩展信息，一些需要频繁更新、需要聚合查询统计的数据
type CourseExtend struct {
	CourseId          int64   `json:"courseId,string"`          // 课程ID
	TotalPersonNum    int64   `json:"totalPersonNum,string"`    // 总学习人数
	TotalPersonTime   int64   `json:"totalPersonTime,string"`   // 总学习人次
	TotalLearningTime int64   `json:"totalLearningTime,string"` //总学习时长
	CollectorNum      int64   `json:"collectorNum,string"`      // 收藏数
	LikeNum           int64   `json:"likeNum,string"`           // 点赞数
	Ranking           float32 `json:"ranking"`                  //评分
	RankNum           int64   `json:"rankNum"`                  // 评分人数
	CommentNum        int64   `json:"commentNum,string"`        // 评论数
	CompletedStudyNum int64   `json:"completedStudyNum,string"` // 完成学习的人数
}

func (r *CourseExtend) TableName() string {
	return "lms_course_extend"
}
